﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace Projet_IMA
{
    public class Couleur
    {
        public float R, V, B;	// composantes R,V,B comprises entre 0 et 1

        // constructeurs

        public Couleur()
        {
        }
        
        public Couleur(float R, float V, float B)
        {
            this.R = R;
            this.V = V;
            this.B = B;
        }

        public Couleur(Couleur c)
        {
            this.R = c.R;
            this.V = c.V;
            this.B = c.B;
        }

     
        private static void check0_255(ref int v)
        {
            if (v < 0) v = 0;
            if (v > 255) v = 255;
        }

        public static Color ToWindowsColor(Couleur c)
        {
            int RR = (int)(c.R * 255);
            int VV = (int)(c.V * 255);
            int BB = (int)(c.B * 255);
            check0_255(ref RR);
            check0_255(ref VV);
            check0_255(ref BB);
            return Color.FromArgb(RR, VV, BB);
        }

        // méthodes

        public float GreyLevel()						// utile pour le Bump Map
        {
            return (R + B + V) / 3.0F;
        }

        // opérateurs surchargés

        public static Couleur operator +(Couleur a, Couleur b)
        {
            return new Couleur(a.R + b.R, a.V + b.V, a.B + b.B);
        }

        public static Couleur operator -(Couleur a, Couleur b)
        {
            return new Couleur(a.R - b.R, a.V - b.V, a.B - b.B);
        }

        public static Couleur operator -(Couleur a)
        {
            return new Couleur(-a.R, -a.V, -a.B);
        }

        public static Couleur operator *(Couleur a, Couleur b)
        {
            return new Couleur(a.R * b.R, a.V * b.V, a.B * b.B);
        }

        public static Couleur operator *(float a, Couleur b)
        {
            return new Couleur(a * b.R, a * b.V, a * b.B);
        }

        public static Couleur operator *(Couleur b, float a)
        {
            return new Couleur(a * b.R, a * b.V, a * b.B);
        }

        public static Couleur operator /(Couleur b, float a)
        {
            return new Couleur(b.R / a, b.V / a, b.B / a);
        }
    }
}

    

    				
